Invalid Executable:Xcode16 Bitcode 解决方案
从2025年4月24号开始,必须使用Xcode16及以上版本构建App上传App Store Connect提交或发布。
1 | Beginning April 24, 2025, apps uploaded to App Store Connect must be built with Xcode 16 or later using an SDK for iOS 18, iPadOS 18, tvOS 18, visionOS 2, or watchOS 11. |
由于苹果强制需要Xcode16构建App,这两天我不得不将Xcode15升级到Xcode16,升级之后在打TF包上传App的时候出现了Invalid Executable报错。
1 | Validation failed |
出现这个问题的原因是某个三方库我们引用的是旧版本,里面包含了Bitcode。Xcode16已默认禁用Bitcode编译选项了,因为我们之前也通过Podfile中的钩子把所有三方库的ENABLE_BITCODE选项设置成YES,但是Xcode16在上传包的时候依然报错,说明ENABLE_BITCODE设置确实不可用。
一、Bitcode 报错解决方案
方案一:手动移除指定三方库的Bitcode(终端操作,适用于单个三方库)
(1)使用find命令,找到SDK文件路径:
1 | find /path/project -name "XXSDK.framework" |
(2)查看是否包含Bitcode:(这步可省略,既然都报错了,那必然是包含)
1 | // 注意:XXSDK 代表三方SDK的名字,输出非0代表包含Bitcode |
(3)移除Bitcode:关键一步
1 | cd /Path/XXSDK/XXSDK.framework |
方案二:在Podfile文件中新增 post_install hook(适用于cocoapods包管理场景)
1 | post_install do |installer| |
方案三:升级三方SDK
三方库的升级会涉及到很多无法评估的线上问题,尤其是大型App,这个根据自身情况来决定,建议考虑升级三方SDK到去除Bitcode的最小版本。
综上所述,我们推荐方案优先级如下所示,可以自己酌情选择最适合自己的方案:
升级三方SDK > Cocoapods自动化脚本 > 手动移除Bitcode
到这里 Bitcode 报错问题便算是解决了!
二、Xcode16 在 Run Script 中指定自定义Ruby版本(适用于在Run Script中执行Ruby脚本的场景)
由于Xcode16在执行Ruby脚本的过程中,默认取的是系统自带的Ruby 2.6的版本(/usr/bin/ruby),在Run Script执行ruby脚本过程中很容易因为一些系统库的差异导致报错,所以一般我们都需要把系统的Ruby切换成Ruby3.x版本,在Mac过程中我们可以使用rbenv来解决自定义Ruby版本的问题。
(1)安装rbenv
1 | brew install rbenv |
(2)使用rbenv安装ruby 3.x版本
1 | rbenv install 3.2.4 |
(3)全局切换Ruby版本(这里也可以局部切换Ruby版本,关于其他使用方式可以自行搜索解决)
1 | rbenv global 3.2.4 |
(4)由于Xcode取的是/usr/bin/ruby,所以我们还需要做一步才能让Xcode在执行Run Script脚本的过程中使用我们安装的自定义Ruby版本
1 | # 下面的/Users/XX/要替换成自己的用户目录 |
更多好文推荐,欢迎关注 《iOS开发秘籍》 公众号,获取最新的内容
本文内容中部分来自网络,后续会持续更新完善。欢迎一起学习交流!
如需转载,请注明出处